#ifndef __LOGER_H
#define __LOGER_H

/* debug setting */
#define __LOG_R_ENABLE			1
#define __LOG_D_ENABLE			1
#define __LOG_I_ENABLE			1
#define __LOG_W_ENABLE			1
#define __LOG_E_ENABLE			1

#define __LOG_DATA(fmt, ...)				     \
do {									                     \
       printf("[D] %s : "fmt, __func__ , ##__VA_ARGS__); \
} while (0)

#define __LOG_INFO(fmt, ...)				     \
do {									                     \
       printf("[I] %s : "fmt, __func__ , ##__VA_ARGS__); \
} while (0)

#define __LOG_WARN(fmt, ...)				     \
do {									                     \
       printf("\033[0;33m"); \
       printf("[W] %s : "fmt, __func__ , ##__VA_ARGS__); \
       printf("\033[0m"); \
} while (0)

#define __LOG_ERROR(fmt, ...)				     \
do {									                     \
       printf("\033[0;31m"); \
       printf("[E] %s : "fmt, __func__ , ##__VA_ARGS__); \
       printf("\033[0m"); \
} while (0)

#if (__LOG_R_ENABLE)
 /* Print information of the raw level */
 #define LOG_RAW	printf
#else
 #define LOG_RAW	(...)
#endif


#if (__LOG_D_ENABLE)
 /* Print information of the data level */
 #define LOG_D(f, a...)     __LOG_DATA(f, ##a)
#else
 #define LOG_D(f, a...)
#endif

#if (__LOG_I_ENABLE)
 /* Print information of the info level */
 #define LOG_I(f, a...)     __LOG_INFO(f, ##a)
#else
 #define LOG_I(f, a...)
#endif

#if (__LOG_W_ENABLE)
 /* Print information of the warning level */
 #define LOG_W(f, a...)     __LOG_WARN(f, ##a)
#else
 #define LOG_W(f, a...)
#endif

#if (__LOG_E_ENABLE)
 /* Print information of the error level */
 #define LOG_E(f, a...)     __LOG_ERROR(f, ##a)
#else
 #define LOG_E(f, a...)
#endif


#endif // !__LOGER_H
